package de.game.graph;

import java.util.ArrayList;

public interface Graph {
	public Graph createGraph(String name, int ID, ArrayList<Node> nodes, ArrayList<Edge> edges, Node root);
	public String getName();
	public ArrayList<Edge> getEdges();
	public void addEdge(Edge e);
	public Edge getEdge(String name, int ID);
	public void removeEdge(Edge e);
	public ArrayList<Node> getNodes();
	public void addNode(Node n);
	public Node getNode(String name, int ID);
	public void removeNode(Node n);
	public void setRoot(Node n);
	public Node getRoot();
	/** a graph is a tree if all nodes are reachable from any node (via
	 * some edge(s)) and if the graph has no cycles (circular connections).
	 * @return true if the graph is a tree; false otherwise
	 */
	public boolean isTree();
	public String toString();
	public void getForgottenNodes(Graph g);
	public void addAllNodesFromRoot(Node root);
//	public void manipulateNodes();
}
